草庐IT

PHP If...Else 语句

全部标签

C++ if 语句替代方案

是我,还是C++要求比C#更多地使用“if”语句?我有这个代码库,它包含很多这样的东西:if(strcmp((char*)type,"double")==0)我想知道如果if语句太多,是不是有点“代码味道”?我并不是说那里不好,但是像字符串比较这样的事情,涉及到很多字符串,难道它们不能以不同的方式完成吗?除了编写if语句序列之外,还有其他选择吗?这只是一个例子,它可以是任何一种IF语句而不是:if(stringa=="blah")thenblaif(stringb=="blah")thenblo 最佳答案 你这样做的原因if(str

c++ - 如何注释#if、#else、#endif 预处理器构造?

想象一个C预处理器block:#ifdefined(NAME)...#else//comment-else...#endif//comment-endif这样的block可能非常大且令人困惑。为了阐明意图和行为,您将如何编写comment-else和comment-endif作为NAME的表达式?注意:我应该补充一点,我对具有组合表达式和嵌套的更复杂的情况特别感兴趣。 最佳答案 #ifdefined(NAME)#else//defined(NAME)#endif//defined(NAME)如果在整个源代码中使用,这是完全明确的。

c++ - 省略 else 关键字

这两种方法有什么真正的区别吗?方法一:boolIsNumOverFive(intnum){if(num>5){returntrue;}else{returnfalse;}}方法二:boolIsNumOverFive(intnum){if(num>5){returntrue;}returnfalse;} 最佳答案 就计算机而言,这两个版本之间没有区别。鉴于两者都是正确的,重要的是阅读代码的人会发现代码易于阅读。我碰巧更喜欢第三个版本:boolIsNumOverFive(intnum){return(num>5);}其他人可能有不同的偏

c++ - 返回 std::string 的函数在没有 return 语句的情况下崩溃,这与返回 int 且没有 return 语句的函数不同

#include#includeusingnamespacestd;stringcrash(){}intnoCrash(){}intmain(){crash();//crashes//noCrash();//doesn'tcrashreturn0;}函数crash()在Mingwg++4.6.2中崩溃,函数noCrash()执行时没有问题。为什么没有return语句返回字符串的函数会崩溃? 最佳答案 两者都是未定义的行为,即使是noCrash也会崩溃。 关于c++-返回std::stri

c++ - 使用超过 50 个 OR ( || ) 优化 if 语句

好的,我正在做一些涉及键盘输入的事情。我现在有一个像这样的巨大功能:returnkey==BB_KEY_SPACE||key==BB_KEY_ZERO||key==BB_KEY_ONE||key==BB_KEY_TWO||key==BB_KEY_THREE||key==BB_KEY_FOUR||key==BB_KEY_FIVE||key==BB_KEY_SIX||key==BB_KEY_SEVEN||key==BB_KEY_EIGHT||key==BB_KEY_NINE||key==BB_KEY_A||key==BB_KEY_B||key==BB_KEY_C||key==BB_KEY_

c++ - switch 语句和递增运算符

我写了下面的代码:inti=0;switch(i++){case0:cout代码的输出是这样的:011谁能解释一下输出的第一行?为什么0和1都被打印出来了? 最佳答案 首先,表达式i++(后递增运算符)的计算结果为0(即使它将i的值设置为1)。所以里面switch,case0:分支被选中。那么,因为没有break在你的case0:之后,程序继续执行case1:中的代码标签。总而言之,您有:第一个switch中的0个分支,1来自第二个分支,另外1因为那是i的最终值. 关于c++-switc

c++ - 相同的 C++ 'if' 语句,在 Linux/Windows 上的结果不同

我发现了一个有趣的案例,即相同的C++代码在不同的系统上产生不同的结果。#includeintmain(){inta=20,b=14;if(a*1.0/b*(a+1)/(b+1)==2)printf("YES!");elseprintf("NO!");}使用GCC4.6.3在UbuntuLinux12.04上编译它输出YES!使用GCC4.6.2在Windows7上编译它输出NO!但是,使用:doublec=a*1.0/b*(a+1)/(b+1);if(c==2)printf("YES!");...将在两台机器上返回YES!。知道为什么会出现这种差异吗?这是由编译器版本不匹配引起的吗(

c++ - 为什么我的 or 语句不起作用,C++?

我正在尝试创建一个函数,用于将字符串中的0、1或2替换为空格。我将通过遍历字符串并比较每个单独的字符来解决这个问题。如果我比较str_in[i]=='0',我的函数将起作用,但如果我添加or语句,它什么都不返回。片段:stringomit_num(string){inti;str_len=str_in.length();str_out="";for(i=0;i 最佳答案 你需要if(str_in[i]=='0'||str_in[i]=='1'||str_in[i]=='2') 关于c++

c++ - C/C++ 编译器会优化这个 if 语句吗?

我有这样的代码,但我觉得它有点难读://code1if((expensiveOperation1()&&otherOperation()&&foo())||(expensiveOperation2()&&bar()&&baz()){//dosomething}我只是将其更改为以下内容,以使其更具可读性://code2constboolexpr1=expensiveOperation1()&&otherOperation()&&foo();constboolexpr2=expensiveOperation2()&&bar()&&baz();if(expr1||expr2){//oneof

c++ - 高效的switch语句

在下面两个版本的switchcase中,我想知道哪个版本是高效的。1:string*convertToString(inti){switch(i){case1:returnnewstring("one");case2:returnnewstring("two");case3:returnnewstring("three");..default:returnnewstring("error");}}2:string*convertToString(inti){string*intAsString;switch(i){case1:intAsString=newstring("one");b